home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 081-090 / amok85 / streams / filestreams.mod next >
Text File  |  1993-11-04  |  4KB  |  135 lines

  1. (*------------------------------------------
  2.  
  3.   :Program.     FileStreams
  4.   :Author.      Dieter Bogdoll [db]
  5.   :Address.     SMail: Gudrunstr. 7, D-8000 München 19
  6.   :Address.     EMail: landon@amc.zer
  7.   :Address.     EMail: 2:246/221.3@fidonet
  8.   :Address.     EMail: bogdoll@informatik.tu-muenchen.de
  9.   :Version.     V1.0
  10.   :Date.        19-Feb-1993
  11.   :Copyright.   Public Domain
  12.   :Language.    Oberon
  13.   :Translator.  Amiga Oberon 3.00d
  14.   :Contents.    Erweiterung von Streams  fuer Fileein/ausgaben
  15.   :Imports.     Streams [db]
  16.   :History.     V0.0   [db] 15-Feb-1993 : Erstellt
  17.   :History.     V1.0   [db] 19-Feb-1993 : Gebrauchsfertig
  18.  
  19. --------------------------------------------*)
  20. MODULE FileStreams;
  21.  
  22. (* $OvflChk- $RangeChk- $NilChk- $ReturnChk- $CaseChk- *)
  23.  
  24. IMPORT e:=Exec, y:=SYSTEM, d:=Dos, S := Streams, FS:=FileSystem;
  25.  
  26. CONST
  27.   eof = 1CX;
  28.  
  29. TYPE
  30.   FileStream* = POINTER TO FileStreamDesc;
  31.   FileStreamDesc* = RECORD (S.StreamDesc)
  32.                       me*: FS.File;
  33.                     END; (* abstract *)
  34.  
  35.   PROCEDURE (f: FileStream) Open* (name: ARRAY OF CHAR; new: BOOLEAN): BOOLEAN;
  36.     BEGIN
  37.       RETURN FS.Open(f.me, name, new);
  38.   END Open;
  39.  
  40.   PROCEDURE (f: FileStream) Close* (): BOOLEAN;
  41.     BEGIN
  42.       RETURN FS.Close(f.me)
  43.   END Close;
  44.  
  45.   PROCEDURE (f: FileStream) Write* (ch: CHAR);
  46.     BEGIN
  47.       IF FS.WriteChar(f.me,ch) THEN END;
  48.   END Write;
  49.  
  50.   PROCEDURE (f: FileStream) WriteLn*;
  51.   END WriteLn;
  52.  
  53.   PROCEDURE (f: FileStream) WriteString* (a: ARRAY OF CHAR);
  54.     VAR bool : BOOLEAN;
  55.     BEGIN
  56.       bool := FS.WriteString(f.me,a);
  57.   END WriteString;
  58.  
  59.   PROCEDURE (f: FileStream) WriteShortInt* (value: SHORTINT; width: INTEGER);
  60.     VAR bool : BOOLEAN;
  61.     BEGIN
  62.       (* width ist hier nur ein Dummy *)
  63.       bool := FS.WriteChar(f.me,CHR(value-MIN(SHORTINT)));
  64.   END WriteShortInt;
  65.  
  66.   PROCEDURE (f: FileStream) WriteInt*(value, width: INTEGER);
  67.     VAR data : STRUCT int: INTEGER END;
  68.         bool : BOOLEAN;
  69.     BEGIN
  70.       (* width ist hier nur ein Dummy *)
  71.       data.int := value;
  72.       bool := FS.WriteBlock(f.me,y.ADR(data),SIZE(data));
  73.   END WriteInt;
  74.  
  75.   PROCEDURE (f: FileStream) WriteLongInt*(value: LONGINT; width: INTEGER);
  76.     VAR data : STRUCT lint: LONGINT END;
  77.         bool : BOOLEAN;
  78.     BEGIN
  79.       (* width ist hier nur ein Dummy *)
  80.       data.lint := value;
  81.       bool := FS.WriteBlock(f.me,y.ADR(data),SIZE(data));
  82.   END WriteLongInt;
  83.  
  84.   PROCEDURE (f: FileStream) Read* (VAR ch: CHAR);
  85.     BEGIN
  86.       IF ~FS.ReadChar(f.me,ch) THEN ch:=eof END;
  87.   END Read;
  88.  
  89.   PROCEDURE (f: FileStream) ReadString* (VAR a: ARRAY OF CHAR);
  90.     VAR bool : BOOLEAN;
  91.     BEGIN
  92.       bool := FS.ReadString(f.me,a)
  93.   END ReadString;
  94.  
  95.   PROCEDURE (f: FileStream) ReadShortInt*(VAR value: SHORTINT): BOOLEAN;
  96.     VAR ch: CHAR;
  97.     BEGIN
  98.       f.Read(ch);
  99.       value := SHORT(ORD(ch)+MIN(SHORTINT));
  100.       RETURN f.me.status=FS.ok
  101.   END ReadShortInt;
  102.  
  103.   PROCEDURE (f: FileStream) ReadInt*(VAR value: INTEGER): BOOLEAN;
  104.     VAR data : STRUCT int: INTEGER END;
  105.         bool : BOOLEAN;
  106.     BEGIN
  107.       bool := FS.ReadBlock(f.me,y.ADR(data),SIZE(data));
  108.       value := data.int;
  109.       RETURN bool
  110.   END ReadInt;
  111.  
  112.   PROCEDURE (f: FileStream) ReadLongInt*(VAR value: LONGINT): BOOLEAN;
  113.     VAR data : STRUCT lint: LONGINT END;
  114.         bool : BOOLEAN;
  115.     BEGIN
  116.       bool := FS.ReadBlock(f.me,y.ADR(data),SIZE(data));
  117.       value := data.lint;
  118.       RETURN bool
  119.   END ReadLongInt;
  120.  
  121. PROCEDURE Create*(): FileStream;
  122. (*------------------------------------------
  123.   :Input.     keine
  124.   :Output.    liefert ein FileStream, der aber
  125.   :Output.    noch geoeffnet werden muss
  126.   :Update.    20-Feb-1993  [db] - Erstellt
  127. --------------------------------------------*)
  128.   VAR f: FileStream;
  129.   BEGIN
  130.     NEW(f);
  131.     RETURN f
  132. END Create;
  133.  
  134. END FileStreams.
  135.